#ifndef COMPONENTDIALOG_H
#define COMPONENTDIALOG_H

#include <QDialog>

extern "C" {
#include "../backend/component.h" // Include the C struct definition
#include "../backend/supplier.h"  // Include supplier definitions
}

// 头文件中使用的 Qt 类的向前声明
class QLineEdit;
class QDialogButtonBox;
class QComboBox;
class QLabel;
class QPushButton;

class ComponentDialog : public QDialog {
    Q_OBJECT // Necessary for signals/slots, even if not used directly here yet

public:
    Component data; // Public member to store the resulting data
    QLineEdit *idEdit, *modelEdit, *nameEdit, *packageEdit, *descEdit, *qtyEdit, *priceEdit;
    QComboBox *supplierComboBox; // 供应商选择组合框
    QLabel *supplierInfoLabel;   // 显示供应商详细信息
    QPushButton *addSupplierBtn; // 添加新供应商按钮

    // 构造函数：父控件，可选的初始数据，ID 是否可编辑的标志，供应商列表
    ComponentDialog(QWidget* parent = nullptr, const Component* init = nullptr, bool idEditable = true, SupplierNode* suppliers = nullptr);

    // 重写 accept 以验证和填充数据结构体
    void accept() override;

private slots:
    // 实时输入验证
    void validateInput();
    
    // 供应商选择变更
    void onSupplierSelectionChanged();
    
    // 添加新供应商
    void onAddSupplierClicked();

private:
    SupplierNode* supplierHead; // 供应商列表
    
    // 设置输入验证器
    void setupValidators();
    
    // 初始化供应商组合框
    void setupSupplierComboBox();
    
    // 更新供应商信息显示
    void updateSupplierInfo();
};

#endif // COMPONENTDIALOG_H